{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "d8c0d8ac-93fe-4da2-8d52-d7261848f819",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-03-31T14:30:47.052000+08:00",
     "iopub.status.busy": "2022-03-31T14:30:46.205000+08:00",
     "iopub.status.idle": "2022-03-31T14:31:19.652000+08:00",
     "shell.execute_reply": "2022-03-31T14:31:19.607000+08:00"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "(process:16104): GLib-GIO-WARNING **: 14:31:09.831: Unexpectedly, UWP app `Clipchamp.Clipchamp_2.2.4.0_neutral__yxz26nhyzhsrt' (AUMId `Clipchamp.Clipchamp_yxz26nhyzhsrt!App') supports 46 extensions but has no verbs\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(182, 182)"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "using Images, ImageBinarization\n",
    "using ImageView, Revise\n",
    "im = load(\"hailaer01.png\");\n",
    "# imshow(im);\n",
    "# imre = imresize(im, (51, 51))\n",
    "# imshow(imre);\n",
    "# imgb = binarize(imre, HistogramThresholding.Otsu::ImageBinarization.BinarizationAPI.AbstractImageBinarizationAlgorithm)\n",
    "# otsu = HistogramThresholding.Otsu();\n",
    "# imgb = binarize(imre, HistogramThresholding.Otsu())\n",
    "size(im)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "0392a9eb-f047-4f17-b4f5-f2d316912a3f",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-03-31T14:31:20.559000+08:00",
     "iopub.status.busy": "2022-03-31T14:31:19.652000+08:00",
     "iopub.status.idle": "2022-03-31T14:31:30.841000+08:00",
     "shell.execute_reply": "2022-03-31T14:31:30.840000+08:00"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGUAAABlCAAAAABxF3ITAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABAtJREFUaAW9wQmSqlgAAMGqiHf/K9ewKIKgbS/zMwf/wuBfGMxiYiD/iwEEEiGB/ECAvDR4kFnyM8krAxIImQglJ3EgO4EyCeTS4CshAbKISbInCym5MliEvCAEyEoCkrtkYwkEsjdYyQtJIA8ShCziJCDkYTCLveTBQI4MCIQ4sAAh9gYLeTB2Ankmk0hA9iQEjJ3BTDaJTGImshOykRKSA5nEwSBIdhKIC0HInnEWIDuDiTwYKzkKZBJyY2A8CeRo8KHYJKuYGLKTnAyexEpOhNB4lmziwoiDuBYyEeKJkWzkbIAcyVnIBZkZm7gyeCHZkXcseWfwTGaWvBdyY2ySk2HJ7yUL48LgBUuuyYnxzsD4C8nCOBtgyMfiIbkJkoXJs8EsOTEuyY0EgQRIskqeDMAI+UQcxCRWJjNJjgYTg5CJJYs4iwNZhSQbQx5iMJNJMpG4SQ5iIichSGyMu0AGG5OZMZMCuYuJ7AWykWvCYCd5Fu/FJwZnsjKOZC9kFvKFwWuBEF+Qk+Rg8IYkIJPkKF6KJ4O3DFnIE4mzmMnR4D3jJbkkJ4O7kAvyWvIk5MJIFvEDyUHGlUGABPI7ccWSwSx+Rp5EcmQ5jJmUHMm3CHGpgayMX5NIjozBRo6S75OSIxk8JN+UnFjyZLCTPMQHAlklLw2uBfIVmcVCboRAdgZ7ySqQD8mJcTB4MJJJIL8UshnsGIGB/I5QcjfYkyDkD1iAQAyO5M8IESCDf2Hwf5LVYBML+XuDuxCI5M8NbmJhJH9tsJGZ8fcGfy55NnhmyU+FSMjBYJP8nkws2RucWPK3RszE+L1kIUfDAJNXAvmlgUSAcWPJTUwC+Y0BSCSELCxkEnfJa8l7g42xEyuZRXIhFsnC5MpgJXvGSlbGhVhZ8s7gkjyx5CAmAoHEKvZkNXiw5LXkkiXXApkMPmQkR7KRk9gMVglY8jvJnSGEMNiz5AWJA/mCJIvBTbJIPhKfSGaDmbEykk8YXzMMGMziznhJvi9NBjdyl1xLdgw5MdkTjMFKrsREVvGR5IkMIJALsQgE4olkApbcGWeDmVySRcRMnmXIO8lk8JrsyRUDLLkz2RizwYnsxEReSRIseWPwWszknVhYcmPyZDBLbuJA3pH4ggkMQAoEAuQm5CsCIUfJRoLBzCAW8kPJnewZg4WxkruQDyUSN/FEBiuZhHyfMTMEAnk2+AvJLGZyMtiTTXyXAXJl8BCbAJnETN4xFvLK4BV5SH5lsJdMYiIQIJNiI983eDBmMZGVbGRWIN80eBayCmQWyI3xLL4yeIhJfC05kvcGDwaxI4tANkIBchNfGhwEyImcJXfyhcGOgdzFXrKRSbFQvjT4gPzSYCdkRx7imXxu8IH4pcG/8B+JHanLZJJHxQAAAABJRU5ErkJggg==",
      "text/plain": [
       "101×101 Array{Gray{N0f8},2} with eltype Gray{N0f8}:\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)  …  Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)  …  Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)  …  Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(1.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " ⋮                                 ⋱                   ⋮\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)  …  Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)  …  Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)     Gray{N0f8}(0.0)  Gray{N0f8}(0.0)\n",
       " Gray{N0f8}(0.0)  Gray{N0f8}(0.0)  …  Gray{N0f8}(0.0)  Gray{N0f8}(0.0)"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# imshow(im[3:180,3:180])\n",
    "imre = imresize(im[3:180,3:180], (101,101))\n",
    "imgb = binarize(imre, HistogramThresholding.Otsu())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "1c638087-625b-4601-82c4-3d1fcac7b497",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-03-31T15:30:41.096000+08:00",
     "iopub.status.busy": "2022-03-31T15:30:41.095000+08:00",
     "iopub.status.idle": "2022-03-31T15:30:41.221000+08:00",
     "shell.execute_reply": "2022-03-31T15:30:41.221000+08:00"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "_simulate_multiresolution_scaling"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "include(\"core.jl\")\n",
    "# imshow(_simulate(imgb, [6,6], [1,1], 5, 100))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "97d665d8-afa0-4702-9224-0bd38108fb89",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-03-31T14:32:10.848000+08:00",
     "iopub.status.busy": "2022-03-31T14:32:07.222000+08:00",
     "iopub.status.idle": "2022-03-31T14:35:59.601000+08:00",
     "shell.execute_reply": "2022-03-31T14:35:59.519000+08:00"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Dict{String, Any} with 4 entries:\n",
       "  \"gui\"         => Dict{String, Any}(\"window\"=>GtkWindowLeaf(name=\"\", parent, w…\n",
       "  \"roi\"         => Dict{String, Any}(\"redraw\"=>148: \"map(clim-mapped image, inp…\n",
       "  \"annotations\" => 114: \"input-38\" = Dict{UInt64, Any}() Dict{UInt64, Any} \n",
       "  \"clim\"        => 113: \"CLim\" = CLim{Float64}(0.0, 1.0) CLim{Float64} "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "imshow(_simulate_multiresolution(imre, [7,7], [1,1], 5, 100, [6,6],2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "bff106fd-2047-47fb-b452-57ea0101535b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-03-31T14:35:59.601000+08:00",
     "iopub.status.busy": "2022-03-31T14:35:59.601000+08:00",
     "iopub.status.idle": "2022-03-31T14:39:06.629000+08:00",
     "shell.execute_reply": "2022-03-31T14:39:06.614000+08:00"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "101×101 Matrix{Float64}:\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  …  0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  …  0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  …  0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " ⋮                        ⋮              ⋱       ⋮                        ⋮\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  …  0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  …  0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  …  0.0  0.0  0.0  0.0  0.0  0.0  0.0"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_simulate_multiresolution_scaling(imre, [7,7], [1,1], 5, 100, [6,6],2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "d10b4123-9c57-494c-afa6-3379932d6f96",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-03-31T14:49:28.346000+08:00",
     "iopub.status.busy": "2022-03-31T14:49:28.346000+08:00",
     "iopub.status.idle": "2022-03-31T14:49:42.286000+08:00",
     "shell.execute_reply": "2022-03-31T14:49:42.285000+08:00"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "using MAT"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "cf4bcd1c-cbc1-4c9e-806b-8415b1e06b04",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-03-31T14:49:52.904000+08:00",
     "iopub.status.busy": "2022-03-31T14:49:52.904000+08:00",
     "iopub.status.idle": "2022-03-31T14:49:56.454000+08:00",
     "shell.execute_reply": "2022-03-31T14:49:56.454000+08:00"
    },
    "scrolled": true,
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "search: \u001b[0m\u001b[1mM\u001b[22m\u001b[0m\u001b[1mA\u001b[22m\u001b[0m\u001b[1mT\u001b[22m \u001b[0m\u001b[1mm\u001b[22m\u001b[0m\u001b[1ma\u001b[22m\u001b[0m\u001b[1mt\u001b[22mch \u001b[0m\u001b[1mM\u001b[22m\u001b[0m\u001b[1ma\u001b[22m\u001b[0m\u001b[1mt\u001b[22mrix \u001b[0m\u001b[1mM\u001b[22m\u001b[0m\u001b[1ma\u001b[22m\u001b[0m\u001b[1mt\u001b[22mching \u001b[0m\u001b[1mm\u001b[22m\u001b[0m\u001b[1ma\u001b[22m\u001b[0m\u001b[1mt\u001b[22mread \u001b[0m\u001b[1mm\u001b[22m\u001b[0m\u001b[1ma\u001b[22m\u001b[0m\u001b[1mt\u001b[22mopen \u001b[0m\u001b[1mm\u001b[22m\u001b[0m\u001b[1ma\u001b[22m\u001b[0m\u001b[1mt\u001b[22mwrite \u001b[0m\u001b[1mM\u001b[22m\u001b[0m\u001b[1ma\u001b[22m\u001b[0m\u001b[1mt\u001b[22mhConstants\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/latex": [
       "No docstring found for module \\texttt{MAT}.\n",
       "\n",
       "\\section{Exported names}\n",
       "\\texttt{@read}, \\texttt{@write}, \\texttt{exists}, \\texttt{matopen}, \\texttt{matread}, \\texttt{matwrite}\n",
       "\n",
       "\\section{Displaying contents of readme found at \\texttt{C:{\\textbackslash}Users{\\textbackslash}13070{\\textbackslash}.julia{\\textbackslash}packages{\\textbackslash}MAT{\\textbackslash}wBZA8{\\textbackslash}README.md}}\n",
       "\\section{MAT.jl}\n",
       "\\href{https://github.com/JuliaIO/MAT.jl/actions}{\\begin{figure}\n",
       "\\centering\n",
       "\\includegraphics{https://github.com/JuliaIO/MAT.jl/workflows/CI/badge.svg?branch=master}\n",
       "\\caption{Build Status}\n",
       "\\end{figure}\n",
       "}\n",
       "\n",
       "\\subsubsection{Read and write MATLAB files in Julia}\n",
       "This library can read MATLAB \\texttt{.mat} files, both in the older v5/v6/v7 format, as well as the newer v7.3 format.\n",
       "\n",
       "\\subsection{Installation}\n",
       "This is installed using the standard tools of the \\href{https://julialang.github.io/Pkg.jl/v1/getting-started/}{package manager}:\n",
       "\n",
       "\\begin{verbatim}\n",
       "pkg> add MAT\n",
       "\\end{verbatim}\n",
       "where you get the \\texttt{pkg>} prompt by hitting \\texttt{]} as the first character of the line. (Exit \\texttt{pkg} mode by hitting backspace or Ctrl-C as the first character of the line.)\n",
       "\n",
       "See also the requirements for the \\href{https://github.com/timholy/HDF5.jl/}{HDF5} module, used for \"v7.3\" files and for writing *.mat files.\n",
       "\n",
       "\\subsection{Usage}\n",
       "To load the module:\n",
       "\n",
       "\\begin{verbatim}\n",
       "using MAT\n",
       "\\end{verbatim}\n",
       "To read a single variable from a MAT file (compressed files are detected and handled automatically):\n",
       "\n",
       "\\begin{verbatim}\n",
       "file = matopen(\"matfile.mat\")\n",
       "read(file, \"varname\") # note that this does NOT introduce a variable ``varname`` into scope\n",
       "close(file)\n",
       "\\end{verbatim}\n",
       "To write a variable to a MAT file:\n",
       "\n",
       "\\begin{verbatim}\n",
       "file = matopen(\"matfile.mat\", \"w\")\n",
       "write(file, \"varname\", variable)\n",
       "close(file)\n",
       "\\end{verbatim}\n",
       "To read all variables from a MAT file as a Dict:\n",
       "\n",
       "\\begin{verbatim}\n",
       "vars = matread(\"matfile.mat\")\n",
       "\\end{verbatim}\n",
       "To write a Dict to a MAT file, using its keys as variable names. The \\texttt{compress} argument is optional, and compression is off by default:\n",
       "\n",
       "\\begin{verbatim}\n",
       "matwrite(\"matfile.mat\", Dict(\n",
       "\t\"myvar1\" => 0,\n",
       "\t\"myvar2\" => 1\n",
       "); compress = true)\n",
       "\\end{verbatim}\n",
       "To get a list of variable names in a MAT file:\n",
       "\n",
       "\\begin{verbatim}\n",
       "file = matopen(\"matfile.mat\")\n",
       "varnames = names(file)\n",
       "close(file)\n",
       "\\end{verbatim}\n",
       "To check for the presence of a variable name in a MAT file:\n",
       "\n",
       "\\begin{verbatim}\n",
       "file = matopen(\"matfile.mat\")\n",
       "if haskey(file, \"variable\")\n",
       "    # something\n",
       "end\n",
       "close(file)\n",
       "\\end{verbatim}\n",
       "\\subsection{Caveats}\n",
       "\\begin{itemize}\n",
       "\\item All files are written in MATLAB v7.3 format.\n",
       "\n",
       "\n",
       "\\item MATLAB v4 files are not currently supported.\n",
       "\n",
       "\\end{itemize}\n",
       "\\subsection{Credits}\n",
       "The MAT\\emph{HDF5 module, which provides read/write support for MATLAB v7.3 files, was written primarily by \\href{https://github.com/timholy/}{Tim Holy}. The MAT}v5 module, which provides read support for MATLAB v5/v6/v7 files, was written primarily by \\href{https://github.com/simonster/}{Simon Kornblith}.\n",
       "\n"
      ],
      "text/markdown": [
       "No docstring found for module `MAT`.\n",
       "\n",
       "# Exported names\n",
       "\n",
       "`@read`, `@write`, `exists`, `matopen`, `matread`, `matwrite`\n",
       "\n",
       "# Displaying contents of readme found at `C:\\Users\\13070\\.julia\\packages\\MAT\\wBZA8\\README.md`\n",
       "\n",
       "# MAT.jl\n",
       "\n",
       "[![Build Status](https://github.com/JuliaIO/MAT.jl/workflows/CI/badge.svg?branch=master)](https://github.com/JuliaIO/MAT.jl/actions)\n",
       "\n",
       "### Read and write MATLAB files in Julia\n",
       "\n",
       "This library can read MATLAB `.mat` files, both in the older v5/v6/v7 format, as well as the newer v7.3 format.\n",
       "\n",
       "## Installation\n",
       "\n",
       "This is installed using the standard tools of the [package manager](https://julialang.github.io/Pkg.jl/v1/getting-started/):\n",
       "\n",
       "```julia\n",
       "pkg> add MAT\n",
       "```\n",
       "\n",
       "where you get the `pkg>` prompt by hitting `]` as the first character of the line. (Exit `pkg` mode by hitting backspace or Ctrl-C as the first character of the line.)\n",
       "\n",
       "See also the requirements for the [HDF5](https://github.com/timholy/HDF5.jl/) module, used for \"v7.3\" files and for writing *.mat files.\n",
       "\n",
       "## Usage\n",
       "\n",
       "To load the module:\n",
       "\n",
       "```julia\n",
       "using MAT\n",
       "```\n",
       "\n",
       "To read a single variable from a MAT file (compressed files are detected and handled automatically):\n",
       "\n",
       "```julia\n",
       "file = matopen(\"matfile.mat\")\n",
       "read(file, \"varname\") # note that this does NOT introduce a variable ``varname`` into scope\n",
       "close(file)\n",
       "```\n",
       "\n",
       "To write a variable to a MAT file:\n",
       "\n",
       "```julia\n",
       "file = matopen(\"matfile.mat\", \"w\")\n",
       "write(file, \"varname\", variable)\n",
       "close(file)\n",
       "```\n",
       "\n",
       "To read all variables from a MAT file as a Dict:\n",
       "\n",
       "```julia\n",
       "vars = matread(\"matfile.mat\")\n",
       "```\n",
       "\n",
       "To write a Dict to a MAT file, using its keys as variable names. The `compress` argument is optional, and compression is off by default:\n",
       "\n",
       "```julia\n",
       "matwrite(\"matfile.mat\", Dict(\n",
       "\t\"myvar1\" => 0,\n",
       "\t\"myvar2\" => 1\n",
       "); compress = true)\n",
       "```\n",
       "\n",
       "To get a list of variable names in a MAT file:\n",
       "\n",
       "```julia\n",
       "file = matopen(\"matfile.mat\")\n",
       "varnames = names(file)\n",
       "close(file)\n",
       "```\n",
       "\n",
       "To check for the presence of a variable name in a MAT file:\n",
       "\n",
       "```julia\n",
       "file = matopen(\"matfile.mat\")\n",
       "if haskey(file, \"variable\")\n",
       "    # something\n",
       "end\n",
       "close(file)\n",
       "```\n",
       "\n",
       "## Caveats\n",
       "\n",
       "  * All files are written in MATLAB v7.3 format.\n",
       "  * MATLAB v4 files are not currently supported.\n",
       "\n",
       "## Credits\n",
       "\n",
       "The MAT*HDF5 module, which provides read/write support for MATLAB v7.3 files, was written primarily by [Tim Holy](https://github.com/timholy/). The MAT*v5 module, which provides read support for MATLAB v5/v6/v7 files, was written primarily by [Simon Kornblith](https://github.com/simonster/).\n"
      ],
      "text/plain": [
       "  No docstring found for module \u001b[36mMAT\u001b[39m.\n",
       "\n",
       "\u001b[1m  Exported names\u001b[22m\n",
       "\u001b[1m  ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡\u001b[22m\n",
       "\n",
       "  \u001b[36m@read\u001b[39m, \u001b[36m@write\u001b[39m, \u001b[36mexists\u001b[39m, \u001b[36mmatopen\u001b[39m, \u001b[36mmatread\u001b[39m, \u001b[36mmatwrite\u001b[39m\n",
       "\n",
       "\u001b[1m  Displaying contents of readme found at\u001b[22m\n",
       "\u001b[1m \u001b[36mC:\\Users\\13070\\.julia\\packages\\MAT\\wBZA8\\README.md\u001b[39m\u001b[22m\n",
       "\u001b[1m  ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡\u001b[22m\n",
       "\n",
       "\u001b[1m  MAT.jl\u001b[22m\n",
       "\u001b[1m  ≡≡≡≡≡≡≡≡\u001b[22m\n",
       "\n",
       "  (Image: Build Status) (https://github.com/JuliaIO/MAT.jl/actions)\n",
       "\n",
       "\u001b[1m  Read and write MATLAB files in Julia\u001b[22m\n",
       "\u001b[1m  ––––––––––––––––––––––––––––––––––––––\u001b[22m\n",
       "\n",
       "  This library can read MATLAB \u001b[36m.mat\u001b[39m files, both in the older v5/v6/v7 format,\n",
       "  as well as the newer v7.3 format.\n",
       "\n",
       "\u001b[1m  Installation\u001b[22m\n",
       "\u001b[1m  ==============\u001b[22m\n",
       "\n",
       "  This is installed using the standard tools of the package manager\n",
       "  (https://julialang.github.io/Pkg.jl/v1/getting-started/):\n",
       "\n",
       "  \u001b[39mpkg\u001b[0m\u001b[91m>\u001b[0m \u001b[0m\u001b[39madd\u001b[0m \u001b[0m\u001b[39mMAT\u001b[0m\u001b[39m\u001b[0m\n",
       "\n",
       "\n",
       "  where you get the \u001b[36mpkg>\u001b[39m prompt by hitting \u001b[36m]\u001b[39m as the first character of the\n",
       "  line. (Exit \u001b[36mpkg\u001b[39m mode by hitting backspace or Ctrl-C as the first character\n",
       "  of the line.)\n",
       "\n",
       "  See also the requirements for the HDF5 (https://github.com/timholy/HDF5.jl/)\n",
       "  module, used for \"v7.3\" files and for writing *.mat files.\n",
       "\n",
       "\u001b[1m  Usage\u001b[22m\n",
       "\u001b[1m  =======\u001b[22m\n",
       "\n",
       "  To load the module:\n",
       "\n",
       "  \u001b[91musing\u001b[0m \u001b[0m\u001b[39mMAT\u001b[0m\u001b[39m\u001b[0m\n",
       "\n",
       "\n",
       "  To read a single variable from a MAT file (compressed files are detected and\n",
       "  handled automatically):\n",
       "\n",
       "  \u001b[39mfile\u001b[0m \u001b[0m\u001b[91m=\u001b[0m \u001b[0m\u001b[96mmatopen\u001b[0m(\u001b[0m\u001b[93m\"matfile.mat\"\u001b[0m\u001b[39m)\u001b[0m\n",
       "  \u001b[0m\u001b[96mread\u001b[0m(\u001b[0m\u001b[39mfile\u001b[0m\u001b[39m,\u001b[0m \u001b[0m\u001b[93m\"varname\"\u001b[0m\u001b[39m)\u001b[0m \u001b[0m\u001b[90m# note that this does NOT introduce a variable ``varname`` into scope\u001b[0m\n",
       "  \u001b[0m\u001b[96mclose\u001b[0m(\u001b[0m\u001b[39mfile\u001b[0m\u001b[39m)\u001b[0m\u001b[39m\u001b[0m\n",
       "\n",
       "\n",
       "  To write a variable to a MAT file:\n",
       "\n",
       "  \u001b[39mfile\u001b[0m \u001b[0m\u001b[91m=\u001b[0m \u001b[0m\u001b[96mmatopen\u001b[0m(\u001b[0m\u001b[93m\"matfile.mat\"\u001b[0m\u001b[39m,\u001b[0m \u001b[0m\u001b[93m\"w\"\u001b[0m\u001b[39m)\u001b[0m\n",
       "  \u001b[0m\u001b[96mwrite\u001b[0m(\u001b[0m\u001b[39mfile\u001b[0m\u001b[39m,\u001b[0m \u001b[0m\u001b[93m\"varname\"\u001b[0m\u001b[39m,\u001b[0m \u001b[0m\u001b[39mvariable\u001b[0m\u001b[39m)\u001b[0m\n",
       "  \u001b[0m\u001b[96mclose\u001b[0m(\u001b[0m\u001b[39mfile\u001b[0m\u001b[39m)\u001b[0m\u001b[39m\u001b[0m\n",
       "\n",
       "\n",
       "  To read all variables from a MAT file as a Dict:\n",
       "\n",
       "  \u001b[39mvars\u001b[0m \u001b[0m\u001b[91m=\u001b[0m \u001b[0m\u001b[96mmatread\u001b[0m(\u001b[0m\u001b[93m\"matfile.mat\"\u001b[0m\u001b[39m)\u001b[0m\u001b[39m\u001b[0m\n",
       "\n",
       "\n",
       "  To write a Dict to a MAT file, using its keys as variable names. The\n",
       "  \u001b[36mcompress\u001b[39m argument is optional, and compression is off by default:\n",
       "\n",
       "  \u001b[96mmatwrite\u001b[0m(\u001b[0m\u001b[93m\"matfile.mat\"\u001b[0m\u001b[39m,\u001b[0m \u001b[0m\u001b[96mDict\u001b[0m(\u001b[0m\n",
       "  \t\u001b[0m\u001b[93m\"myvar1\"\u001b[0m \u001b[0m\u001b[91m=>\u001b[0m \u001b[0m\u001b[36m0\u001b[0m\u001b[39m,\u001b[0m\n",
       "  \t\u001b[0m\u001b[93m\"myvar2\"\u001b[0m \u001b[0m\u001b[91m=>\u001b[0m \u001b[0m\u001b[36m1\u001b[0m\n",
       "  \u001b[0m\u001b[39m)\u001b[0m\u001b[39m;\u001b[0m \u001b[0m\u001b[39mcompress\u001b[0m \u001b[0m\u001b[91m=\u001b[0m \u001b[0m\u001b[91mtrue\u001b[0m\u001b[39m)\u001b[0m\u001b[39m\u001b[0m\n",
       "\n",
       "\n",
       "  To get a list of variable names in a MAT file:\n",
       "\n",
       "  \u001b[39mfile\u001b[0m \u001b[0m\u001b[91m=\u001b[0m \u001b[0m\u001b[96mmatopen\u001b[0m(\u001b[0m\u001b[93m\"matfile.mat\"\u001b[0m\u001b[39m)\u001b[0m\n",
       "  \u001b[0m\u001b[39mvarnames\u001b[0m \u001b[0m\u001b[91m=\u001b[0m \u001b[0m\u001b[96mnames\u001b[0m(\u001b[0m\u001b[39mfile\u001b[0m\u001b[39m)\u001b[0m\n",
       "  \u001b[0m\u001b[96mclose\u001b[0m(\u001b[0m\u001b[39mfile\u001b[0m\u001b[39m)\u001b[0m\u001b[39m\u001b[0m\n",
       "\n",
       "\n",
       "  To check for the presence of a variable name in a MAT file:\n",
       "\n",
       "  \u001b[39mfile\u001b[0m \u001b[0m\u001b[91m=\u001b[0m \u001b[0m\u001b[96mmatopen\u001b[0m(\u001b[0m\u001b[93m\"matfile.mat\"\u001b[0m\u001b[39m)\u001b[0m\n",
       "  \u001b[0m\u001b[91mif\u001b[0m \u001b[0m\u001b[96mhaskey\u001b[0m(\u001b[0m\u001b[39mfile\u001b[0m\u001b[39m,\u001b[0m \u001b[0m\u001b[93m\"variable\"\u001b[0m\u001b[39m)\u001b[0m\n",
       "      \u001b[0m\u001b[90m# something\u001b[0m\n",
       "  \u001b[0m\u001b[91mend\u001b[0m\n",
       "  \u001b[0m\u001b[96mclose\u001b[0m(\u001b[0m\u001b[39mfile\u001b[0m\u001b[39m)\u001b[0m\u001b[39m\u001b[0m\n",
       "\n",
       "\n",
       "\u001b[1m  Caveats\u001b[22m\n",
       "\u001b[1m  =========\u001b[22m\n",
       "\n",
       "    •  All files are written in MATLAB v7.3 format.\n",
       "\n",
       "    •  MATLAB v4 files are not currently supported.\n",
       "\n",
       "\u001b[1m  Credits\u001b[22m\n",
       "\u001b[1m  =========\u001b[22m\n",
       "\n",
       "  The MAT\u001b[4mHDF5 module, which provides read/write support for MATLAB v7.3 files,\n",
       "  was written primarily by Tim Holy (https://github.com/timholy/). The MAT\u001b[24mv5\n",
       "  module, which provides read support for MATLAB v5/v6/v7 files, was written\n",
       "  primarily by Simon Kornblith (https://github.com/simonster/)."
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "?MAT"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "e3c814e4-03a9-42bf-b69e-6249fd50b1f2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-03-31T14:56:44.637000+08:00",
     "iopub.status.busy": "2022-03-31T14:56:44.637000+08:00",
     "iopub.status.idle": "2022-03-31T14:56:44.654000+08:00",
     "shell.execute_reply": "2022-03-31T14:56:44.654000+08:00"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "ti = \"ti.mat\";\n",
    "huihe = \"huihe.mat\";\n",
    "hailaer = \"hailaer.mat\";hailaer01 = \"hailaer01.mat\";hailaer02 = \"hailaer02.mat\";hailaer03 = \"hailaer03.mat\";\n",
    "meander = \"meander.mat\";\n",
    "non_stationary = \"non_stationary.mat\";\n",
    "crack = \"crack.mat\";\n",
    "circle = \"circle.mat\";\n",
    "channel = \"channel.mat\";\n",
    "categorical = \"categorical.mat\";\n",
    "rectangle = \"rectangle.mat\";\n",
    "ti_dir = \"ti_mat\\\\\";"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "cc2f7318-3c52-4825-97bb-d0996182cfb2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-03-31T15:49:53.527000+08:00",
     "iopub.status.busy": "2022-03-31T15:49:53.527000+08:00",
     "iopub.status.idle": "2022-03-31T15:49:53.884000+08:00",
     "shell.execute_reply": "2022-03-31T15:49:53.812000+08:00"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "var = matread(ti_dir*circle)\n",
    "ti = var[\"im\"]\n",
    "imshow(ti)\n",
    "include(\"core.jl\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "73bf7670-d94c-4396-876e-99516aa5ead3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-03-31T15:50:20.340000+08:00",
     "iopub.status.busy": "2022-03-31T15:50:20.340000+08:00",
     "iopub.status.idle": "2022-03-31T15:50:20.497000+08:00",
     "shell.execute_reply": "2022-03-31T15:50:20.497000+08:00"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "_simulate_multiresolution_scaling"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "include(\"core.jl\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "id": "d709002c-4d1c-4c2c-a050-dff5fde56c97",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-03-31T15:50:21.090000+08:00",
     "iopub.status.busy": "2022-03-31T15:50:21.089000+08:00",
     "iopub.status.idle": "2022-03-31T15:50:22.664000+08:00",
     "shell.execute_reply": "2022-03-31T15:50:22.663000+08:00"
    },
    "tags": []
   },
   "outputs": [
    {
     "ename": "LoadError",
     "evalue": "DimensionMismatch(\"The number of columns in a and b must match.\")",
     "output_type": "error",
     "traceback": [
      "DimensionMismatch(\"The number of columns in a and b must match.\")",
      "",
      "Stacktrace:",
      "  [1] get_common_ncols",
      "    @ C:\\Users\\13070\\.julia\\packages\\Distances\\6E33b\\src\\common.jl:11 [inlined]",
      "  [2] colwise",
      "    @ C:\\Users\\13070\\.julia\\packages\\Distances\\6E33b\\src\\generic.jl:149 [inlined]",
      "  [3] _cluster_a_node(node::Vector{Int64}, sim_grid::Matrix{Float64}, pat::Vector{Int64}, centers::Matrix{Float64})",
      "    @ Main C:\\Users\\13070\\Documents\\Jupyter\\dispat_julia\\core.jl:229",
      "  [4] _sim_a_node(node::Vector{Int64}, sim_grid::Matrix{Float64}, pat::Vector{Int64}, centers::Matrix{Float64}, db::Matrix{Float64}, id::Vector{Int64}, inner::Vector{Int64})",
      "    @ Main C:\\Users\\13070\\Documents\\Jupyter\\dispat_julia\\core.jl:265",
      "  [5] _sim(db::Matrix{Float64}, sim_grid::Matrix{Float64}, pat::Vector{Int64}, centers::Matrix{Float64}, sim_path::Vector{Int64}, id::Vector{Int64}, inner::Vector{Int64})",
      "    @ Main C:\\Users\\13070\\Documents\\Jupyter\\dispat_julia\\core.jl:306",
      "  [6] _simulate_singleresolution(im::Matrix{Float64}, sim_grid::Matrix{Float64}, pat::Vector{Int64}, skip::Vector{Int64}, mds::Int64, cluster_num::Int64, inner::Vector{Int64})",
      "    @ Main C:\\Users\\13070\\Documents\\Jupyter\\dispat_julia\\core.jl:361",
      "  [7] _simulate_multiresolution_scaling(im::Matrix{UInt8}, pat::Vector{Int64}, skip::Vector{Int64}, mds::Int64, cluster_num::Int64, inner::Vector{Int64}, resolution::Int64)",
      "    @ Main C:\\Users\\13070\\Documents\\Jupyter\\dispat_julia\\core.jl:432",
      "  [8] top-level scope",
      "    @ In[71]:1",
      "  [9] eval",
      "    @ .\\boot.jl:373 [inlined]",
      " [10] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)",
      "    @ Base .\\loading.jl:1196"
     ]
    }
   ],
   "source": [
    "_simulate_multiresolution_scaling(ti, [9, 9], [2, 2], 15, 100, [5, 5],2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "a426776a-4dd5-4dca-ac83-3424a0384bce",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-03-31T15:43:58.104000+08:00",
     "iopub.status.busy": "2022-03-31T15:43:58.103000+08:00",
     "iopub.status.idle": "2022-03-31T15:44:04.890000+08:00",
     "shell.execute_reply": "2022-03-31T15:44:04.854000+08:00"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "101×101 Matrix{Float64}:\n",
       " 1.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0  …  0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 1.0  1.0  1.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 1.0  1.0  1.0  1.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 1.0  1.0  1.0  1.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 1.0  1.0  1.0  1.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 1.0  1.0  1.0  1.0  0.0  0.0  0.0  0.0  …  0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 1.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 1.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  1.0  1.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  1.0  1.0  1.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  …  0.0  0.0  0.0  1.0  1.0  1.0  1.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  1.0  1.0  1.0  1.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  1.0  1.0  1.0  1.0\n",
       " ⋮                        ⋮              ⋱       ⋮                        ⋮\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  …  0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  1.0  1.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  1.0  1.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  …  0.0  0.0  0.0  0.0  0.0  1.0  1.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  1.0  1.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  1.0  1.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  1.0  1.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       " 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  …  0.0  0.0  0.0  0.0  0.0  0.0  0.0"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_simulate_multiresolution(ti, [9, 9], [2, 2], 2, 100, [3, 3],2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4a566ae4-5414-44cf-b7f4-db22e79f7448",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Julia 1.7.2",
   "language": "julia",
   "name": "julia-1.7"
  },
  "language_info": {
   "file_extension": ".jl",
   "mimetype": "application/julia",
   "name": "julia",
   "version": "1.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
